var mobx = require('./mobx4.1');
var autorun = mobx.autorun;
var observable = mobx.observable;
var toJS = mobx.toJS
var observer = function (page) {

  var oldOnLoad = page.onLoad;
  var oldOnUnload = page.onUnload;

  // page._update = function () {
  //   //console.log('_update');
  //   var newData = {};
  //   var props = this._data || {};
  //   this.setData({ ...toJS(props) });
  // }

  page.onLoad = function () {
    var that = this;
    // support observable props here
    that.store = mobx.observable(page.data);
    that._autorun = autorun(function () {
      if(page.watch){
        var keys = Object.keys(page.watch)
        var datakeys = Object.keys(JSON.parse(JSON.stringify(page.data)))
        keys.forEach(function(k){
          if(datakeys.indexOf(k)!=-1){
            var v = {}
            v[k] = that.store[k]
            page.watch[k](v[k], that.data[k])
            that.setData(v)
          }
        })
      } 
      // that._update();
    });

    if (oldOnLoad) {
      oldOnLoad.apply(this, arguments);
    }
  }

  page.onUnload = function () {
    // clear autorun
    this._autorun();
    if (oldOnUnload) {
      oldOnUnload.apply(this, arguments);
    }
  }

  return page;
}

module.exports = observer